﻿using System;

namespace Segmentation.Business.Criterions
{
    public class Effectiveness : Criterion
    {
        #region Properties

        public override string Name
        {
            get
            {
                return "Effectiveness";
            }
        }

        #endregion

        #region Methods

        protected override double Calculate(byte[,] mapIdeal, byte[,] mapCalculated)
        {
            int height = mapIdeal.GetLength(0);
            int width = mapIdeal.GetLength(1);

            int I = 0;

            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width - 1; x++)
                {
                    if (mapCalculated[y, x] != mapCalculated[y, x + 1])
                    {
                        I++;
                    }
                }
            }
            
            int n = height * width;         // количество пикселей в изображении
            int k = I;                      // количество значущих пикселей результата сегментации
            int pixelFormat = 8 * 3;        // логарифм по основанию два от количество градаций интенсивности
                                            // int q = Math.Pow(2, 8 * 3);
                                            // Math.Log(q, 2);

            return (n * pixelFormat) / (k + 1);
        }

        #endregion
    }
}
